package com.lqfan.bigdata.Project.business

import com.lqfan.bigdata.Project.utils.SQLUtils
import com.lqfan.bigdata.Project.utils.SQLUtils
import org.apache.spark.sql.{DataFrame, SparkSession}

object ProvinceCityStatTopNApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder()
      .master("local[2]")
      .appName("ProvinceCityStatApp")
      .getOrCreate()

    //数据源是kudu的ods表
    val odsDF: DataFrame = spark.read.format("org.apache.kudu.spark.kudu")
      .option("kudu.table", "ods")
      .option("kudu.master", "hadoop000")
      .load()
    //    odsDF.show()

    //对数据进行统计：求每个省份下每个城市数量最多的TopN   这是一个典型的TopN
    odsDF.createOrReplaceTempView("ods")
    val result: DataFrame = spark.sql(SQLUtils.PROVINCE_CITY_TOPN_SQL)
    result.show(false)

//    import spark.implicits._
//    import org.apache.spark.sql.functions._
//    odsDF.groupBy($"provincename", $"cityname")
//      .count().as("cnt")
//      .show(false)

//    //TODO...  将统计后的数据写入 kudu的 province_city_stat表中
//    val kuduMasters = "hadoop000"
//    val kuduTables  = "province_city_stat_topN"
//    val partitonKey = "provincename"
//
//    val schema = SchemaUtils.ProvinceCitySchema
//
//    //只需要定义表相关的信息，  创建表、删除表等操作都封装到KuduUtils.sink方法中
//    KuduUtils.sink(kuduMasters, kuduTables, partitonKey, schema, result)

    spark.stop()
  }
}
